package com.kclm.se.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ParameterizedBeanDemo {

	public static void main(String[] args) {
		//1. 获取 ParameterizeBean的Class实例
		Class<?> c = ParameterizeBean.class;
		//2.获取它的所有属性
		Field[] fields = c.getDeclaredFields();
		//3.迭代
		for(Field f : fields) {
			//
			f.setAccessible(true);
			//获取属性的泛型类型
			Type type = f.getGenericType();
			//如果此属性不是一个泛型类，则它的type就是Class
			//System.out.println(type);
			//
			if(type instanceof ParameterizedType) {
				ParameterizedType pt = (ParameterizedType) type;
				//获取此类型所代表的 真实类型以及它的泛型参数
				Type t = pt.getRawType(); //真实类型
				Type[] tarr = pt.getActualTypeArguments(); //泛型类型，有可能会多个
				System.out.printf("真实类型：%s,OwnerType: %s, 它的泛型类型：", t.getTypeName(),pt.getOwnerType());
				for(Type ty : tarr) {
					System.out.printf("%s ", ty.getTypeName());
				}
				System.out.println();
			}
		}
	}
}
